package dang.action.cart;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import dang.common.Constant;
import dang.dao.DaoFactory;
import dang.dao.ProductDao;
import dang.entity.Product;


public class Cart implements Serializable {
	private List<CartItem> items= new ArrayList<CartItem>();
	
	public boolean add(CartItem cartItem){
		for(int i=0;i<items.size();i++){
			CartItem item = items.get(i);
			if(item.getProduct().getId()==cartItem.getProduct().getId())
				return false;
		}
		items.add(cartItem);
		return true;
	}
	public List<CartItem> list(){
		return items;
	}
	
	public void delete (long id){
		for(int i=0;i<items.size();i++){
			CartItem item=items.get(i);
			if(item.getProduct().getId()==id){
				items.remove(item);
				return;
			}
			
		}
	}
	
	public void modify(long id ,int qty){
		for(int i=0;i<items.size();i++){
			CartItem item=items.get(i);
			if(item.getProduct().getId()==id){
				item.setQty(qty);
				return;
			}
		}
	}
	
	public void clear(){
		items.clear();
	}
	
	public double cost(){
		double sum=0;
		for(int i=0;i<items.size();i++){
			CartItem item =items.get(i);
			sum+=item.getQty()*item.getProduct().getDang_price();
		}
		return sum;
	}
	/**
	 * 将购物车内部的商品条目转换成一个字符串：
	 * 比如: 1,8,0;2,11,1;3,7,0
	 * 表示id为1的产品购买了8件，未删除...
	 * @return
	 */
	public String store(){
		StringBuffer sb = new StringBuffer();
		if(items.size()==0){
			sb.append("0");
		}else{
			for(int i=0;i<items.size();i++){
				CartItem item=items.get(i);
				int deleted=item.getProduct().isDeleted()?1:0;
				sb.append(item.getProduct().getId()+","+item.getQty()+","+deleted+";");
			}
		}
		if(sb.length()<0){
			sb.deleteCharAt(sb.length()-1);
		}
		return sb.toString();
	}
	
	/**
	 * 依据content字符串:比如1,8;2,11;3,7
	 * 重新构造一个CartItem集合。
	 * @param content
	 */
	public List<CartItem> load(String content){
		if(content==null||content.equals("0")){
			return null;
		}
		items.clear();
		String[] strs=content.split(";");
		for (String s : strs) {
			String[] str=s.split(",");
			int id = Integer.parseInt(str[0]);
			int qty=Integer.parseInt(str[1]);
			boolean deleted=Integer.parseInt(str[2])==1?true:false;
			ProductDao dao=DaoFactory.getProductDao(Constant.TYPE_BOOK);
			try {
				Product product = dao.findById(id);
				product.setDeleted(deleted);
				CartItem item=new CartItem();
				item.setProduct(product);
				item.setQty(qty);
				items.add(item);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return items;
	}
}
